es6-05 扩展

一、字符串扩展

包含是否的结果都是true或false;

  • includes(str) : 判断是否包含指定的字符串 true|false === indexOf,也可以用于数组;includes是使用全等的;

  • startsWith(str) : 判断是否以指定字符串开头

  • endsWith(str) : 判断是否以指定字符串结尾

  • repeat(count) : 重复指定次数 返回一个新的字符串

javascript 就是由面向对象思想造出来的一个产品 语法是ECMAscript

var s1 = 'abc'//字面量形式创建一个字符串类型的数据

虽然是字面量形式创建的字符串,字面量形式创建的数据也能继承 构造函数创建出来的字符串对象 的特性

只有对象才有属性和方法

字面量形式创建的字符串 本质上(底层)也是由 new String() 创建出来的

padStart、padEnd

(1)接收两个参数,第一个参数为最小长度,第二个参数为补全字符串;

'1'.padStart(2,'0')  //返回 '01'
'1'.padEnd(2,'0')   //返回 '10'

(2)如果原字符串等于或大于指定的最小长度,则返回原字符串;

'10'.padStart(2,'0')  //返回 '10'

(3)如果原字符串的长度小于补全字符串的长度,则截去超出位数的补全字符串;

'09-12'.padStart(10, 'YYYY-MM-DD')   // "YYYY-09-12"
'09-12'.padEnd(10, 'YYYY-MM-DD')    // "09-12YYYY-"

二、数字的扩展

  • isFinite(i) : 判断是否是有限大的数

  • isNaN(i) : 判断是否是NaN,两个NaN是不等的;

  • Number.isInteger(i) : 判断是否是整数

  • parseInt(str) : 将字符串转换为对应的数值

  • Math.trunc(i) : 直接去除小数部分,必须是纯数字,如果数字带单位,则会是NAN

三、数组扩展

Array.from

将伪数组对象或可遍历对象转换为真数组,需要一个变量来接收

Array.from(v,[callback])

Array.from转换对象的时候,键名必须写数字下标, 必须加length长度,否则会失败;

一个类数组对象,必须要有length,属性名必须是数值,属性名作为数组的索引号,如果不带length,from转换出来的将是空数组;

Array.from的第二个参数为回调函数,指定返回的数组是什么形式的,参数item,index,arr

const cities = [{id:1,age:18},{id:2,age:20}]
let arr = Array.from(cities,({age})=>age)   //[18,20] 返回对象中的每一项
//{age} 第二个参数返回数组的每一项,也可以不填写;

小括号中代表每一个对象,使用对象解构,将年龄返回出来;如果是返回一个对象,则键名需要以[]中括号形式返回;

Array.of

将一系列值转换成数组,和new Array传值是一样的

Array.of(v1, v2, v3)  // 将一系列值转换成数组,和new Array传值是一样的;
var arr = Array.of(3)  // 这个3不是数组的长度,是一个数组;

Array.fill

使用什么来填充

Array(5).fill('') // 将数组填充5个空字符串;fill填写字符;

四、对象扩展

Object.is

Object.is(v1, v2)

判断2个数据是否完全相等,两个NaN是相等的,普通判断两个NaN是不相等的;

对象浅拷贝

Object.assign(target, source1, source2..)

将源对象的属性复制到目标对象身上,source是源对象;

浅拷贝修改属性值之后,源对象的值不会被改变,如果是数组或对象,则会被改变;

需要声明一个空对象再进行拷贝;

也可以:let obj3 = Object.assign({},obj1,obj2...)常用于合并对象;

对象深拷贝

var obj1 = JSON.parse(JSON.stringify(arr/obj))

将对象转换成字符串,再将字符串转换成对象,所以需要一个变量来接收,就是一个新的对象;

数组或对象深拷贝, 函数不能拷贝;

深拷贝原理:(数组,对象都可用)浅拷贝+递归

function deepCopy( obj ){
    if( Object.prototype.toString.call( obj ).slice(8,-1) == 'Object' ){
        var result = {}
    }else if( Object.prototype.toString.call( obj ).slice(8,-1) == 'Array' ){
        var result = []
    }  //判断数据类型类型  如果是数组则初始一个  []  如果是一个Object则初始一个 {}

    //浅拷贝,但是+ 递归思想,就实现了深拷贝
    for( var attr in obj ){
        if( typeof obj[attr] == 'object'){      //判断传入的键值是否是数组或对象
            result[attr] = deepCopy( obj[attr] )  //如果是对象则再调用一次函数; 实现递归;
        }else{
            result[attr] = obj[attr]  //将每一天数据输入进对象或数组;
        }
    }
    return result
}